<?php
	require_once("A.class.php");
	class Menu {
	/*
		Classe Menu - Version 0.1
		Auteur : Loïc "MetalFox" PARRA
		Classe mère de la gestion des menus.
		
		README :
		Le menu créé est en réalité une liste faite de <ul> et de <li>.
		Les catégories sont regroupées dans un tableau de tableaux de la forme ["category" => "Titre de la catégorie", "link" => "Lien de la catégorie"].
		Les liens seront dans leur ordre d'entrée.
		Il est possible de mettre une séparation entre deux catégories. Cela aura pour effet de modifier la classe des prochaines catégories.
		
		DEPENDANCES :
		- A.class.php (classe A) : les liens des catégories sont des instances de la classe A.
		
		SUCRE SYNTAXIQUE :
		Comme toujours, un echo suffit a afficher le menu.
		
		CHANGELOG :
		- 0.0 : Création de la classe
		- 0.1 : Modification de la structure des catégories (tableau de tableaux) pour corriger un bug d'ordonnencement
		- 0.2 : Ajout d'une fonctionnalité permettant d'afficher un texte simple si le lien n'est pas donné.
	*/
		var $categories;
		var $id;
		var $cellClass;
		var $menuClass;
		
		function Menu($idMenu,$classeCellules,$classeMenu=""){
			/* 
				Constructeur du menu.
				@param $idMenu : Id de la balise <ul>.
				@param $classeCellules : Classe par défaut des balises <li> (modifiables ensuite avec les boundaries).
				@return N/A.
			*/
			$this->categories = array();
			$this->id = $idMenu;
			$this->cellClass = $classeCellules;
			$this->menuClass = $classeMenu;
		}
		
		function setCategory($nomCategorie,$lienCategorie){
			/* 
				Ajoute une catégorie au menu. S'il existe déja, il le modifie.
				@param $nomCategorie : nom de la catégorie.
				@param $lienCategorie : lien pointant vers la catégorie.
				@return N/A.
			*/
			$this->categories[] = array("category" => $nomCategorie,"link" => $lienCategorie);
		}
		
		function setBoundary($classe){
			/* 
				Ajoute une séparation au menu. Cela a pour effet de modifier le nom de la classe de tous les elements insérés après la séparation.
				@param $classe : nom de la nouvelle classe à utiliser.
				@return N/A.
			*/
			$this->setCategory("__boundary",$classe);
		}
		
		function setTitle($text){
			$this->setCategory($text,'');
		}
		
		function make(){
			/* 
				Créé le menu.
				@return : un String du menu mis en forme.
			*/
			$class = $this->cellClass;
			$menu = ($this->menuClass == "")? '<ul id="'.$this->id.'">':'<ul id="'.$this->id.'" class="'.$this->menuClass.'">';
			foreach($this->categories as $couple){
				if($couple['category'] == "__boundary"){$class = $couple['link'];}
				else{
					if($couple['link'] == ''){ $a=$couple['category'];}
					else{$a = ($couple['link'] instanceof AGen)? $couple['link']:new A($couple['category'],$couple['link'],$couple['link']);}
					$menu .= ($class == '')? '<li>'.$a.'</li>':'<li class="'.$class.'">'.$a.'</li>';
				}
			}
			$menu .= '</ul>';
			return $menu;
		}
		
		function __toString(){
			/* 
				MAGIC METHOD pour gérer la concatenation, les echos etc...
				@return : le menu mis en forme.
			*/
			return $this->make();
		}
	}
?>